# -*- coding: utf8 -*-
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import pywt
import matplotlib


# 加载原图


def show():
    # 显示原图
    original = mpimg.imread('image.jpg')
    fig = plt.figure()
    fig.suptitle("original image", fontsize=14)
    plt.imshow(original, cmap='Greys_r')
    plt.show()
def rgb2gray(rgb):
     return np.dot(rgb[...,:3], [0.299, 0.587, 0.144])


def jia(cip1, cip2, cip3, cip4):
    original = mpimg.imread('image.jpg')
    original = rgb2gray(original)
    fig = plt.figure()
    print  (original)
    # original1 = np.loadtxt("a.txt")
    # fig1 = plt.figure()
    # fig1.suptitle("original image", fontsize=14)
    # plt.imshow(original1, interpolation="nearest", cmap=plt.cm.gray)

    # 对原图进行小波变换加密(也可以理解成第一次简单的加密，下面的密文加密是第二次)，生成4个图像数据

    # 需要查 LL, (LH, HL, HH)对应的是什么数据
    coeffs2 = pywt.dwt2(original, 'bior1.3')
    LL, (LH, HL, HH) = coeffs2
    height = LL.shape[0]
    width = LL.shape[1];

    #
    # 第一个密文对小波变换生成的ll数据进行加密操作，
    # 加密算法为LL[i][j]=LL[i][j] + ((i + j) * 100 * cip1)，cip1是密文，100是加密系数，可调
    # cip1太小时加密后的图像中还能看到原图的影像，所以加一个加密系数，使加密后的图像与原图没有相似之处。
    # (i + j)使密文跟随数据位置动态变化
    a=100
    ll = []
    if(cip1>1):
        a=100
    if(cip1<0.0000001):
        a=100000000

    for i in range(0, height):
        tmp = []
        for j in range(0, width):
            tmp.append(LL[i][j] + ((i + j) * a * cip1))
        ll.append(tmp)

    # 第二个密文对小波变换生成的lh数据进行加密操作，
    # 加密算法为LL[i][j]=LL[i][j] + ((i + j) * 100 * cip2)，cip2，100是加密系数，可调
    # cip2太小时加密后的图像中还能看到原图的影像，所以加一个加密系数，使加密后的图像与原图没有相似之处。
    # (i + j)使密文跟随数据位置动态变化
    lh = []
    for i in range(0, height):
        tmp = []
        for j in range(0, width):
            tmp.append(LH[i][j] + ((i + j) * a * cip2))
        lh.append(tmp)

    # 第三个密文对小波变换生成的hl数据进行加密操作，
    hl = []
    for i in range(0, height):
        tmp = []
        for j in range(0, width):
            tmp.append(HL[i][j] + ((i + j) * a * cip3))
        hl.append(tmp)

    # 第四个密文对小波变换生成的hh数据进行加密操作，
    hh = []
    for i in range(0, height):
        tmp = []
        for j in range(0, width):
            tmp.append(HH[i][j] + ((i + j) * a * cip4))
        hh.append(tmp)

    # 显示加密后的图像，从图像中已看不出原图
    titles = ['Approximation', ' Horizontal detail',
              'Vertical detail', 'Diagonal detail']
    for i, a in enumerate([ll, lh, hl, hh]):
        ax = fig.add_subplot(2, 2, i + 1)
        ax.imshow(a, cmap='Greys_r')
        # ax.imshow(a, origin='image', interpolation="nearest", cmap=plt.cm.gray)
        ax.set_title(titles[i], fontsize=12)
    fig.suptitle("dwt2 coefficients", fontsize=14)



    plt.show()
    #     转换为可用矩阵
    ll = np.array(ll)
    lh = np.array(lh)
    hl = np.array(hl)
    hh = np.array(hh)

    # 4个矩阵合成一个矩阵
    cof = np.hstack((ll, lh))
    cof1 = np.hstack((hl, hh))
    cof2 = np.vstack((cof, cof1))

    plt.imsave('image1.png', cof2)
    # 保存图片数据至txt文件
    np.savetxt("a.txt", cof2)




# 不用输入的测试
# jia(10, 10, 10, 10)
